JSON Decoding in Go (golang)
A quick example of JSON decoding (or unmarshaling) in Go. This is basically magic, it’s totally amazing I love it.
It’s possible to decode the JSON into generic maps, but if you know the structure you can get the JSON to populate native go structures automatically. You need to be mindful of types, go wont for example convert an int to a string, it’ll just ignore it.
This means if you have a JSON object that contains string:int key values and string:string key values and you try to populate a golang string map from it, you’ll lose all you string:int pairs. You are better off creating a struct to represent it as seen below.
package main import ( "encoding/json" "fmt" ) type LogEntry struct { Time string Cpm float32 Duration int32 Accel_x_start int32 Accel_y_start int32 Accel_z_start int32 Accel_x_end int32 Accel_y_end int32 Accel_z_end int32 } type Log struct { Log_size int Onyx_version string UTC_offset string Log_data [] LogEntry } func main() { b := []byte(`{"log_size":61,"onyx_version":"pre11","UTC_offset":"undef","log_data":[{"time":"2012-10-23T22:23:54Z","cpm":46,"duration":30,"accel_x_start":-4,"accel_y_start":-97,"accel_z_start":-3,"accel_x_end":-1,"accel_y_end":-98,"accel_z_end":-2}]}`) var l Log json.Unmarshal(b, &l) fmt.Printf("logsize: %d onyxversion: %s data1: %s\n",l.Log_size,l.Onyx_version,l.Log_data[0]); }